"""
@author: 石沙
@date: 2020-10-13
@content：本模块用于关键数据集的加载
"""

import pandas as pd
import configs.settings as conf
from site_packages.utils.job import DataOp
import os


def json_to_df(file_name=None, json_dicts=None, return_df=False):
    """
    :param file_name: 模型原始输入数据的文件
    :param json_dicts: 形如该示例的字典{
        "10770": {
            "title": "安踏 童装 旗舰店 男童 羽绒 风衣 儿童 冬装 儿童 羽绒服 夹克 保暖 外套 经典 黑",
            "kb": {
                "适用季节": "冬季",
                "含绒量": "71%-80%",
                "安全等级": "A类"
            },
            "ocr": "细节展示，亮点展示，头带光环/有亮点，撞色拼接/很时尚，羽绒加持/抵御寒冷，工装风格/超有范儿，连帽设计，印花图案，松紧袖口，定制里料，一起变，挡风小立领，穿戴有，图案简约大方，有效防止羽绒钻出，着更舒，工艺精致，商品名称:羽绒风衣，型，舒适保暖，实现孩子心心念念的英雄，每个小男孩的心中都有一个英雄梦，带着善良、正义，在冬日的黑夜里，充满小男子汉的勇敢气息，Information商品信息，一件自带LED灯的羽绒服，帽子上的LED灯设计，让孩子在黑暗中，水份过多时挂晒，可能导致衣物变形，带来不一样的视觉冲击，质感满满的撞色拼，中大童，守护自己的安全，户外休闲工装版型",
            "reference": "童装羽绒服让这个冬季保暖御寒的同时，带有时尚的韵味，衣襟拉链设计，防风保暖呵护宝宝的身体，加厚童装羽绒服，防风御寒，更衬托宝宝可爱脸蛋。"
        }，
        "2": {
            "title": "土拨鼠 男款 户外运动 休闲 抓绒 开衫 黑色",
            "kb": {
                "适用人群": "男士",
                "功能": "超轻",
                "尺码": "XS",
                "分类": "抓绒衣",
                "适用场景": "徒步",
                "品牌": "土拨鼠（Marmot）"
            },
            "ocr": "立领设计，拉链口袋，细节展示，产品展示，土拨鼠吊，前胸口袋，洗涤方式，能迅速吸收运动过程产生的汗水，快速干燥，舒适保暖，衣身两侧拉链口袋，立领设计商务休闲，舒适保暖，拉链采用YKK拉链制作，土拨鼠洗唛标展示，美观大，保护收纳物品，产品特，不易丢失，(以吊牌为准)，徒步、登山、旅行、露营、跑步、日常穿着、骑行，基本信息，收纳物品，前胸拉链口袋方便，大方，产地:越南，4759青鬼蓝，颜色:，展示，2975深海军蓝，深海军蓝，面料:聚苯，黑色",
            "reference": "时尚的小高领设计，可以有效锁住勃颈处的温度，让寒风也无法侵袭。前胸处的口袋搭配上时尚的品牌logo，美观还实用，让你的穿搭造型更显品味和档次。采用100wt抓绒，穿起来更暖和。"
        },
    },
    :param return_df: 是否返回数据集
    :return: 当return_df=True，返回处理后的pd.DataFrame
    """
    assert file_name is not None or json_dicts is not None, '请输入要加载的文件名或者传入json字符串'
    if file_name is not None:
        df = pd.read_json(os.path.join(conf.DATA_PATH, file_name))
    else:
        df = pd.DataFrame(json_dicts)

    rec_id = df.columns.tolist()
    columns = df.index.tolist()
    df = pd.DataFrame(df.values.T, columns=columns)
    df.insert(0, 'rec_id', rec_id)
    if return_df:
        return df
    else:
        DataOp.save(df, file_name, is_model=False)


def load_clothing_data():
    """加载已保存为pd.DataFrame的数据集"""
    return DataOp.load_data('服饰_50k')


def load_dic():
    """加载字典"""
    return DataOp.load_data('dictionary')


def load_cleaned_data():
    """加载清洗后的数据集"""
    return DataOp.load_data('cleaned_data')


def load_gensim_embedding():
    """加载基于gensim的word2vec训练好的词嵌入矩阵"""
    return DataOp.load_data('gensim_embedding')


def load_expanded_dic():
    return DataOp.load_data('expanded_dic')


def load_embedding_matrix():
    word2vec = DataOp.load_model('word2vec')
    return word2vec.wv.vectors